package cn.good.yan.service.t6;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 6. CAS
 * AtomicInteger 原子类
 * 原子类的方法
 *
 * @author shengren.yan
 * @create 2024-03-30
 */
public class CASDemo1 {

    public static void main(String[] args) {
        // 原子类 - （比较并交换） - 初始值是5
        AtomicInteger atomicInteger = new AtomicInteger(5);
        // 获取最新值 atomicInteger.get() 更改值为10 ，返回布尔值
        System.out.println(atomicInteger.compareAndSet(5, 10) + "\t" + atomicInteger.get());
        // 更改失败，因为最新值的值 已不是5
        System.out.println(atomicInteger.compareAndSet(5, 20) + "\t" + atomicInteger.get());
        atomicInteger.getAndIncrement();

        // 【原子类的方法】
        // 获取当前值
        atomicInteger.get();
        // 获取当前值，并设置新的值
        atomicInteger.getAndSet(1);
        // 获取当前值，并自增
        atomicInteger.getAndIncrement();
        // 获取当前值，并自减
        atomicInteger.getAndDecrement();
        // 获取当前值，并自加上该值，就是 + 2
        atomicInteger.getAndAdd(2);
        // 比较并替换，如果属于该值等于预期值，就原子方式，进行更新新值
        boolean b = atomicInteger.compareAndSet(1, 2);
    }

}
